package org.softee.functional;

import java.util.Collection;

import org.softee.functional.functions.Mapper;
import org.softee.functional.functions.Predicate;
import org.softee.functional.functions.ReduceFunction;
import org.softee.functional.functions.Transposal;

public interface Functional<F> {
    Functional<F> sequential();
    Functional<F> parallel();
    Functional<F> filter(Predicate<? super F> predicate);
    <T> Functional<T> map(Mapper<? super F, ? extends T> mapper);
    Functional<F> transpose(Transposal<F> transposal);
    F reduce(ReduceFunction<F> reduceFunction);
    Collection<F> values();
    <T extends Collection<? super F>> T into(T target);
    //Functional<F> withExceptionHandler(ExceptionHandler e);
}
